#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
命令行批量处理启动入口
提供命令行方式进行批量数据提取
"""

import argparse
import sys
import os

# 添加当前目录到Python路径
current_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, current_dir)

from app.batch_processor import BatchProcessor
from app.config import APP_SETTINGS


def main():
    """主函数"""
    parser = argparse.ArgumentParser(description='个人剂量监测报告批量提取工具 - 命令行版本')
    parser.add_argument('data_dir', help='数据目录的绝对路径')
    parser.add_argument('time_range', help='时间范围，如: 2025Q1-2025Q2 或 2025Q1')
    parser.add_argument('-e', '--excel', 
                       default=APP_SETTINGS['DEFAULT_EXCEL_PATH'],
                       help='Excel查询文件路径')
    parser.add_argument('-o', '--output', 
                       help='输出CSV文件路径（可选，默认自动生成）')
    parser.add_argument('--results-dir',
                       default=APP_SETTINGS['RESULTS_DIR'],
                       help='结果保存目录')
    parser.add_argument('--summary', 
                       action='store_true',
                       help='显示详细的处理摘要')
    
    args = parser.parse_args()
    
    # 检查输入目录
    if not os.path.exists(args.data_dir):
        print(f"错误: 数据目录不存在: {args.data_dir}")
        sys.exit(1)
        
    # 检查Excel文件
    excel_path = None
    if args.excel and os.path.exists(args.excel):
        excel_path = args.excel
    elif args.excel:
        print(f"警告: Excel文件不存在: {args.excel}")
        
    try:
        # 创建批量处理器
        processor = BatchProcessor(excel_path)
        
        # 确定输出路径
        if args.output:
            output_file = args.output
            # 确保输出目录存在
            os.makedirs(os.path.dirname(output_file), exist_ok=True)
        else:
            # 自动生成输出目录
            output_dir = processor.generate_output_directory(args.time_range, args.results_dir)
            output_file = os.path.join(output_dir, "batch_result.csv")
        
        print("=" * 60)
        print("个人剂量监测报告批量提取工具")
        print("=" * 60)
        print(f"数据目录: {args.data_dir}")
        print(f"时间范围: {args.time_range}")
        print(f"Excel文件: {excel_path or '未指定'}")
        print(f"输出文件: {output_file}")
        print("-" * 60)
        
        # 处理所有季度数据
        quarters = processor.process_all_quarters(args.data_dir, args.time_range)
        
        # 生成汇总CSV
        df = processor.generate_summary_csv(quarters, output_file)
        
        # 获取并显示处理摘要
        summary = processor.get_processing_summary(quarters)
        
        print("\n" + "=" * 60)
        print("处理完成！")
        print("=" * 60)
        print(f"处理季度: {', '.join(quarters)}")
        print(f"样品总数: {summary['total_samples']} 个")
        print(f"超标样品: {summary['over_limit_count']} 个")
        print(f"结果文件: {output_file}")
        
        # 显示详细摘要
        if args.summary:
            print("\n" + "-" * 60)
            print("详细摘要:")
            print("-" * 60)
            for detail in summary['sample_details'][:10]:  # 只显示前10个
                print(f"  {detail['sample_id']}: {detail['quarter_info']} -> 总计:{detail['total_dose']} ({detail['status']})")
            
            if summary['total_samples'] > 10:
                print(f"  ... 还有 {summary['total_samples'] - 10} 个样品")
        
        print("\n处理完成！")
        
    except Exception as e:
        print(f"错误: 处理过程中出错: {e}")
        sys.exit(1)


if __name__ == '__main__':
    main()
